﻿#ifndef KEY_BUTTON_H
#define KEY_BUTTON_H

#include <QPushButton>

class KeyButton : public QPushButton
{
    Q_OBJECT
public:
    enum Type { Auto = 0, LowerCase, UpperCase, SpecialChar };

    struct Mode {
        int key;          //Qt::Key
        QString value;    //text
        QString display;  //display text
        Type type;        //default: Auto
    };

    KeyButton(const QList<Mode> modes = QList<Mode>(), QWidget *parent = NULL); //由结构体类型容器完成构造
    Mode mode(); //获取当前模式，返回的是结构体

    void onReponse(const QObject* receiverObj, const QString &receiver);

    void switchCapsLock(); //大小写切换
    void switchSpecialChar(); //特殊字符切换
    void switching(); //循环切换

signals:
    void pressed(int key, QString value); //发送信号给上层类

private slots:
    void onPressed(); //将QPushButton的pressed信号转为带数据的pressed信号

private:
    Type find(const QString &value);
    Mode find(Type type);
    Mode findNext();
    void setText(const QString &text);

private:
    Mode        m_preMode; //前一个模式
    Mode        m_mode;    //当前模式
    QList<Mode> m_modes;   //按钮携带3种模式，大写字母、小写字母、特殊符号
};

#endif //KEY_BUTTON_H
